избавьтесь от символа

printf "%s\t" Nt n{1..1600} >file_a
printf "%s\t" R cha 2 987 > file_aa
awk '{print}' file_a file_aa > newfile

создать файл, в котором заголовок похож

Nt /t n1 /t n2 /t n3 ....

проблема состоит в том, что при взгляде на то, как это печатает, оказывается, что в последнем n это

\t   n   1   5   9   8  \t   n   1   5   9   9  \t   n   1   6
0   0  \t  \n

таким образом, существует что-то после nt 1600 - как я могу проиграть, это длится \t в awk? Или где-нибудь?

Я говорил о последнем \t в этом \t n 1 5 9 8 \t n 1 5 9 9 \t n 1 6 0 0 \t \n здесь - мне нужен символ новой строки - оба ответа не решили это.

Мне действительно нужно

printf "%s\t" Nt n{1..1600} >file_a
printf "%s\t" R cha 2 987 > file_aa

Должна быть новая строка.

0
задан 29 June 2015 в 14:33

3 ответа

Принятие Вас говорит [приблизительно 114], если Вы не хотите, чтобы та новая строка появилась, используйте cat для присоединения к тем файлам вместо awk:

cat file_a file_aa > newfile

различие:

$ awk 1  <(printf "%d\t" {1..2} ) <(printf "%d\t" {1..2} )
1   2   
1   2   
$ cat <(printf "%d\t" {1..2} ) <(printf "%d\t" {1..2} )
1   2   1   2   
<час>

, Так как Вы хотите удалить запаздывание \t, попробуйте:

sed -i 's/\t*$//' file_a
awk '{print}' file_a file_aa
  • \t*$ любое количество вкладок в конце строки $.

эффект:

$ awk 1 <(printf "%d\t" {1..2} | sed 's/\t*$//') <(printf "%d\t" {1..2} ) | od -c              
0000000   1  \t   2  \n   1  \t   2  \t  \n
0000011
2
ответ дан 4 October 2019 в 01:52

При необходимости в новой строке просто добавьте один

{ printf "%s\t" Nt n{1..1600}; echo; } > file_a
{ printf "%s\t" R cha 2 987;   echo; } > file_aa
sed 's/\t$//'  file_a file_aa          > newfile

Или без временных файлов:

{ 
    printf "%s\t" Nt n{1..1600}; echo
    printf "%s\t" R cha 2 987;   echo
} | sed 's/\t$//' > newfile

Или, не имея необходимость явно удалять запаздывающие вкладки:

(                    # in a subshell, so IFS is not modified in the current shell
    IFS=\t'
    head1=( Nt n{1..1600} ); echo "${head1[*]}"
    head2=( R cha 2 987 );   echo "${head2[*]}"
) > newfile
1
ответ дан 4 October 2019 в 01:52

Вкладка там, потому что Вы добавляете его:

printf "%s\t" 

, Который распечатает каждую строку, которую Вы даете сопровождаемому вкладкой. Так, последняя строка будет иметь вкладку после него также. Чтобы избежать, чтобы, Вы могли или удалить его после создания его с помощью sed или подобные инструменты (см. @muru ответ ), или можно использовать различный инструмент для создания его. Например, perl:

perl -le 'print "NT\tn", join("\tn",(1..1600)), "\nR\tcha\t2\t987\n"' > newfile
1
ответ дан 4 October 2019 в 01:52

Другие вопросы по тегам:

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