Преобразование txt-файла в csv

Вы забыли закрыть строку в двойных кавычках, которую вы открыли в первой строке вашей команды. (вы использовали одинарную кавычку в конце URL-адреса, вероятно, по ошибке ). Просто нажмите Ctrl+C и начните сначала. Затем убедитесь, что вы правильно закрываете каждую цитату.

Подсказка >является вторичной подсказкой ($PS2). Он отображается в ситуации, когда для завершения текущей команды требуется больше ввода. В вашем случае у вас есть открытая двойная кавычка, поэтому она ждет, пока вы ее закроете.

Вот еще одна ситуация, когда всплывает эта подсказка:

$ for str in hello world
> do
> echo "$str"
> done
hello
world

Команда не будет выполнена, пока я не наберу doneи не нажму Enter , поэтому вместо того, чтобы пытаться выполнить наполовину введенную команду for str in hello world, оболочка ожидает, что я закончу цикл, набрав done.

Или близко к тому, что вы на самом деле сделали:

$ echo "hello
> this is line 2
> Quotes like 'these' don't matter
> because we have an un-closed double quote at the start
> Now, we'll close it"
hello
this is line 2
Quotes like 'these' don't matter
because we have an un-closed double quote at the start
Now, we'll close it
-1
23.11.2020, 20:47
2 ответа

Вот так:

$ awk '{ 
        if(NR==1){
            sub(/,/,"");    
            gsub(/   */,","); 
            print
        }
        else{ 
            if(NR%5==2){ 
                if(NR>2){print ""}
                printf "%s,",$0
            }
            else{
                printf "%s,",$0
            }
        }
    }
    END{print ""}' file
Symbol,Name,Sector,Market Cap $K,Last,Links
 AAPL,Apple Inc,Computers and Technology,2,006,722,560,118.03,
 AMGN,Amgen Inc,Medical,132,594,808,227.76,
 AXP,American Express Company,Finance,91,986,280,114.24,

Вы можете добавить небольшую пост--обработку для удаления завершающих ,и начальных пробелов:

$ awk '{ if(NR==1){sub(/,/,""); gsub(/   */,","); print}else{ if(NR%5==2 ){ if(NR>2){print ""}printf "%s,",$0}else{printf "%s,",$0}}}END{print ""}' file | sed 's/^  *//; s/,$//'
Symbol,Name,Sector,Market Cap $K,Last,Links
AAPL,Apple Inc,Computers and Technology,2,006,722,560,118.03
AMGN,Amgen Inc,Medical,132,594,808,227.76
AXP,American Express Company,Finance,91,986,280,114.24
0
18.03.2021, 22:47

Использование GNUsed:

sed -z '
    s/,//g;
     # remove all commas
    s/\n\([^[[:blank:]]\)/,\1/g;
     # replace "\n" +a non-Tab/Space char with a comma and revert back char itself
    s/[[:blank:]][[:blank:]]\+/,/g;
     # replace repeated Tabs/Spaces with a comma 
' infile

комментирует -команду free, а также удаляет начальные пробелы:

sed -z '
    s/,//g;
    s/\n\([^[[:blank:]]\)/,\1/g;
    s/[[:blank:]][[:blank:]]\+/,/g; s/\n[[:blank:]]\+/\n/g;
' infile
0
18.03.2021, 22:47

Теги

Похожие вопросы