여러 파일의 두 번째 열을 인쇄하는 방법은 무엇입니까?

여러 파일의 두 번째 열을 인쇄하는 방법은 무엇입니까?

10개가 넘는 파일이 있고 첫 번째 열은 모든 파일에서 동일하며 한 파일의 첫 번째 열을 기준으로 모든 파일의 두 번째 열을 모두 수집해야 합니다. 나는 전에 시도했다반죽그 다음에하지만 이것은 처음 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 ""}'

세 가지 입력 파일을 사용하겠습니다.

$ 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

관련 정보