파일에서 두 번째, 세 번째, 네 번째 필드를 추출 aaa.log
하고 다음과 같이 출력을 생성 해야 합니다.
- sqlplus -sl dbsnmp/Or8cle@\"COL3:COL4/COL2\"
입력하다:
$ cat aaa.log
aaa:fDb:a0081:1800:f1:dsds
aaa:iDb:a0081:1801:i1:dsds
aaa:pDb:a0081:1802:p1:dsds
예상 출력:
sqlplus -sl dbsnmp/Or8cle@\"a0081:1800/fDb\"
sqlplus -sl dbsnmp/Or8cle@\"a0081:1801/iDb\"
sqlplus -sl dbsnmp/Or8cle@\"a0081:1802/pDb\"
COL2를 파일로 추출했습니다.
$ cat aaa.log | cut -d":" -f2 > aaa_i.log
$ cat aaa_i.log
fDb
iDb
pDb
그리고 COL3과 COL4를 추출합니다.
$ cat aaa.log | awk -F: '{print $3 ":" $4}' > aaa_h_p.log
$ cat aaa_h_p.log
a0081:1800
a0081:1801
a0081:1802
아래 코드를 사용해 보았습니다.
set -f
IFS='
> '
set -- $( cat aaa_i.log)
for i in `cat aaa_h_p.log`
do
printf "%s %s\n" "sqlplus -sl sys/hSys10Nov@\""${i}"/"$1"\""
done
현재 출력:
sqlplus -sl dbsnmp/Or8cle@\"a0081:1800/fDb\"
sqlplus -sl dbsnmp/Or8cle@\"a0081:1801/fDb\"
sqlplus -sl dbsnmp/Or8cle@\"a0081:1802/fDb\"
나는 o/p의 COL2에서만 fDb를 얻는 반면 거기에 모든 값을 원합니다. 코드를 수정하도록 도와주세요. AWK를 사용하여 변경하는 것도 환영합니다.
답변1
while IFS=: read a b c d e f;do
echo sqlplus -sl dbsnmp/Or8cle@\"$c:$d/$b\"
done < aaa.log
답변2
배열은 이런 종류의 작업에 적합합니다(특히 얼마나 많은 필드가 있는지 확실하지 않은 경우).
while IFS=: read -a var; do
printf 'sqlplus -s1 dbsnmp/Or8cle@\\"%s:%s/%s\\"\n' "${var[2]}" "${var[3]}" "${var[1]}"
done < aaa.log
sqlplus -s1 dbsnmp/Or8cle@\"a0081:1800/fDb\"
sqlplus -s1 dbsnmp/Or8cle@\"a0081:1801/iDb\"
sqlplus -s1 dbsnmp/Or8cle@\"a0081:1802/pDb\"
답변3
아래 awk 솔루션을 사용해보십시오 -
vipin@kali:~$ awk 'BEGIN{FS=":"}{print v1$3,$4v2$2v3}' v1='sqlplus -sl dbsnmp/Or8cle@\\"' v2='/' v3='\\"' OFS=":" kk.txt
sqlplus -sl dbsnmp/Or8cle@\"a0081:1800/fDb\"
sqlplus -sl dbsnmp/Or8cle@\"a0081:1801/iDb\"
sqlplus -sl dbsnmp/Or8cle@\"a0081:1802/pDb\"
FS,OFS = 필드 구분 기호. v1,v2,v3 = 요구 사항에 따라 문장을 인쇄하기 위한 변수입니다.