스크립트 출력을 열에서 행으로 변환

스크립트 출력을 열에서 행으로 변환

데이터가 포함된 이와 같은 파일이 있습니다.

tcp,0,5,server1,1221,server5,0
udp,0,7,server2,4324,server1,0
tcp,2,1,server3,2355,server4,0

아래는 내 스크립트의 평가판 버전입니다.

while true; do
if [[ $first == "2" ]] ; then
read -p "Please input the src IP pattern: " sstr
cat temp | awk -F',' -v pat="$sstr" 'tolower($4) ~ pat {print $4}' 
fi 
if [[ $second == "4" ]] ; then
read -p "Please input the dest IP pattern: " dstr
cat temp | awk -F',' -v pat="$dstr" 'tolower($6) ~ pat {print $6}' 
fi
break
done > $destfile

다음과 같은 출력

src 
server1
server2
server3
dest
server5
server1
server4

나는 그것이 이렇기를 바랍니다

src dest
server1 server5
server2 server1
server3 server4

답변1

awk를 통해 동일한 파일을 여러 번 파이핑하는 대신 파일을 한 번 반복하여 완전히 awk에서 수행합니다. 예를 들어:

#!/bin/bash

# accept src and dst from command line args
# very primitive.  use getopts to do this properly.
[ -n "$1" ] && sstr="$1"
[ -n "$2" ] && dstr="$2"

# if not provided on command line, ask for them
[ -z "$sstr" ] && read -p "Please input the src IP pattern: " sstr
[ -z "$dstr" ] && read -p "Please input the dst IP pattern: " dstr

awk -F, -v src="$sstr" -v dst="$dstr" '
  BEGIN {IGNORECASE=1; print "src dst"};
  $4 ~ src && $6 ~ dst { print $4,$6 }' temp

산출:

$ ./print-both-columns.sh 1 5
src dst
server1 server5

관련 정보