複数のファイルの2番目の列を印刷する方法は?

複数のファイルの2番目の列を印刷する方法は?

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

関連情報