awk最后一行问题的行到列

awk最后一行问题的行到列,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

我有几个文件夹,每个文件夹都包含一个文本文件,我想在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    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,请将您的代码包装在“代码标签”按钮中
{}
编辑您的帖子时。如果您可以使用GNU
datamash
,那么
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