awk最后一行问题的行到列
我有几个文件夹,每个文件夹都包含一个文本文件,我想在Bash中转置(将行转换为列)。我已经在for循环中用awk设置了这个,但是最后一行有一个问题,它从来没有正确转置过 这是我的input.txtawk最后一行问题的行到列,awk,Awk,我有几个文件夹,每个文件夹都包含一个文本文件,我想在Bash中转置(将行转换为列)。我已经在for循环中用awk设置了这个,但是最后一行有一个问题,它从来没有正确转置过 这是我的input.txt ID1 11208 13391 16070 19383 ID2 6691 8489 8723 7493 ID3 5768 6004 7754 7614 这是我的output.txt,有错误 ID1 ID2 ID3 11208 6691 576
ID1 11208 13391 16070 19383
ID2 6691 8489 8723 7493
ID3 5768 6004 7754 7614
这是我的output.txt,有错误
ID1 ID2 ID3
11208 6691 5768
13391 8489 6004
16070 8723 7754
19383
7493
7614
这就是我想要的
ID1 ID2 ID3
11208 6691 5768
13391 8489 6004
16070 8723 7754
19383 7493 7614
我的awk one liner是:
input.txt | awk '{for(i=1; i<=NF; i++) A[i]=A[i] (NR>1?OFS:x) $i} END{for(i=1; i<=NR; i++) print A[i]}' OFS="\t" > output.txt
input.txt | awk'{for(i=1;i1?OFS:x)$i}END{for(i=1;i下面的awk
可能会对您有所帮助
awk '
!a[$1]++{
val=val?val OFS $1:$1}
{
for(i=2;i<=NF;i++){
b[FNR,i]=$i}
}
END{
print val;
for(j=2;j<=NF;j++){
for(k=1;k<=FNR;k++){
printf("%s%s",b[k,j],k==FNR?ORS:OFS)}
}}
' Input_file
如果看到控件M字符,请执行以下操作以删除它们
tr -d '\r' < Input_file > temp_file && mv temp_file Input_file
tr-d'\r'temp\u file&&mv temp\u file Input\u file
欢迎使用SO,请将您的代码包装在“代码标签”按钮中{}
编辑您的帖子时。如果您可以使用GNUdatamash
,那么datamash transpose
是一个不错的选择。否则,请参阅许多建议。很抱歉,我是一个新手,没有遵循之前的思路,可能会重复,谢谢!谢谢RavinderSingh13,我在另一个答案w中也看到了这一点我试试看!@AntonisG,如果您的输入来自另一个命令,那么请像您的| u命令|我的awk脚本
让我知道它是如何运行的?几乎可以肯定OP有DOS行结尾(每行的最后一个数字都附加了额外的Ctl-M)。请使用cat-t input.txt
验证。@RavinderSingh13刚刚做对,非常感谢您的时间和帮助!!
tr -d '\r' < Input_file > temp_file && mv temp_file Input_file