我需要從文件中提取第二個、第三個和第四個欄位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 = 根據我們的要求印出句子的變數。