摆脱性格
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 ....
问题在于,当看到它如何打印时,结果certificate它在最后的n中是
\tn 1 5 9 8 \tn 1 5 9 9 \tn 1 6 0 0 \t \n
所以有一些东西在1600之后 – 我怎么能在awk中输掉最后一个? 还是某个地方?
我在谈论最后的\t
\tn 1 5 9 8 \tn 1 5 9 9 \tn 1 6 0 0 \t \n
这里 – 我需要换行符 – 两个答案都没解决。
我确实需要
printf "%s\t" Nt n{1..1600} >file_a printf "%s\t" R cha 2 987 > file_aa
必须有换行符。
假设您正在讨论\n
,如果您不希望出现换行符,请使用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
如果您需要换行,只需添加一行
{ 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
选项卡是因为您要添加它:
printf "%s\t"
这将打印你给它的每个字符串,然后是一个标签。 所以,最后一个字符串也会有一个标签。 为避免这种情况,您可以在使用sed
或类似工具创建它之后删除它(请参阅@ muru的答案 ),或者您可以使用其他工具来创建它。 例如, perl
:
perl -le 'print "NT\tn", join("\tn",(1..1600)), "\nR\tcha\t2\t987\n"' > newfile