我有几个文件夹,每个文件夹都包含一个文本文件,我将在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
我的一个班轮是:
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
提前感谢您的所有时间
答案 0 :(得分:1)
关注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
编辑: 感谢@jas指出这一点:
@OP:如果您有DOS结束行,请点击此处:
cat -v Input_file
如果您看到控制M字符,请执行以下操作以删除它们。
tr -d '\r' < Input_file > temp_file && mv temp_file Input_file