10個を超えるファイルがあり、最初の列はすべてのファイルで同じであり、1つのファイルの最初の列に基づいてすべてのファイルの2番目の列をすべて収集する必要があります。私は前に試しました生地それからアッただし、これは最初の10ファイルの列のみを印刷します。
paste p{01..20}.dat | awk '{print $1" "$2" "$4" "$6" "$8" "$10" "$12" "$14" "$16" "$18" "$20}' > output.dat
p01.datファイルの例
0.000 1.3594
0.500 1.3600
1.000 1.3603
1.500 1.3601
2.000 1.3595
2.500 1.3584
3.000 1.3570
3.500 1.3552
4.000 1.3530
4.500 1.3506
他のすべてのファイルはフォーマットが同じで、最初の列も同じです。
答え1
@ John1024ソリューションのバリエーションです。
paste -d '=' p*.dat | sed 's/=\S*//g'
答え2
ループが必要ですfor
。努力する:
paste p{01..20}.dat | awk '{printf "%s",$1; for (i=2;i<=NF;i=i+2) printf " %s",$i; print ""}'
はい
3つの入力ファイルを使用します。
$ paste p*.dat
1 a 1 aa 1 aaa
2 b 2 bb 2 bbb
3 c 3 cc 3 ccc
私たちのコマンドは以下を生成します。
$ paste p*.dat | awk '{printf "%s",$1; for (i=2;i<=NF;i=i+2) printf " %s",$i; print ""}'
1 a aa aaa a a a a a a a a a a a a a a a a a
2 b bb bbb b b b b b b b b b b b b b b b b b
3 c cc ccc c c c c c c c c c c c c c c c c c
20ファイルを使用した例
上記の3つのファイルから始めて、別の17のファイルを作成します。
for i in {04..20}; do cp p01.dat p$i.dat; done
貼り付けが機能していることを確認できます。
$ paste p{01..20}.dat
1 a 1 aa 1 aaa 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a 1 a
2 b 2 bb 2 bbb 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b 2 b
3 c 3 cc 3 ccc 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c 3 c
また、awk コマンドが動作していることを確認することもできます。
$ paste p{01..20}.dat | awk '{printf "%s",$1; for (i=2;i<=NF;i=i+2) printf " %s",$i; print ""}'
1 a aa aaa a a a a a a a a a a a a a a a a a
2 b bb bbb b b b b b b b b b b b b b b b b b
3 c cc ccc c c c c c c c c c c c c c c c c c
答え3
paste
+cut
+seq
いたずら:
paste -d' ' p{01..20}.dat | cut -d' ' -f1,"$(seq -s',' 2 2 20)"
テストケース(3つのファイル):
$ head p0[1-3].dat
==> p01.dat <==
0.000 1.3594
0.500 1.3600
1.000 1.3603
1.500 1.3601
2.000 1.3595
2.500 1.3584
3.000 1.3570
3.500 1.3552
4.000 1.3530
4.500 1.3506
==> p02.dat <==
0.000 2.3594
0.500 2.3600
1.000 2.3603
1.500 2.3601
2.000 2.3595
2.500 2.3584
3.000 2.3570
3.500 2.3552
4.000 2.3530
4.500 2.3506
==> p03.dat <==
0.000 3.3594
0.500 3.3600
1.000 3.3603
1.500 3.3601
2.000 3.3595
2.500 3.3584
3.000 3.3570
3.500 3.3552
4.000 3.3530
4.500 3.3506
paste -d' ' p{01..03}.dat | cut -d' ' -f1,"$(seq -s',' 2 2 6)"
0.000 1.3594 2.3594 3.3594
0.500 1.3600 2.3600 3.3600
1.000 1.3603 2.3603 3.3603
1.500 1.3601 2.3601 3.3601
2.000 1.3595 2.3595 3.3595
2.500 1.3584 2.3584 3.3584
3.000 1.3570 2.3570 3.3570
3.500 1.3552 2.3552 3.3552
4.000 1.3530 2.3530 3.3530
4.500 1.3506 2.3506 3.3506