我有以下文本文件,我需要比較每行的值,即項目2-4與項目5-7中的值。我堅持使用bash/awk/sed。使用bash將一行中的字符串分配給變量
的樣本數據:
[hartford tmp]$ cat flist
a1 1 2 3 x y z
b1 3 2 1 z y x
c1 1 2 3 1 2 3
d1 4 5 6 6 5 4
e1 a b c a b c
f1 x y z x y z
它與下面的腳本,但它只是不能忍受緩慢,可能是因爲所有的echo
S的。
[hartford tmp]$ cat pdelta.sh
#!/bin/bash
cat flist |while read rec; do
f1="$(echo $rec | awk '{ print $1 }')"
f2="$(echo $rec | awk '{ print $2 }')"
f3="$(echo $rec | awk '{ print $3 }')"
f4="$(echo $rec | awk '{ print $4 }')"
f5="$(echo $rec | awk '{ print $5 }')"
f6="$(echo $rec | awk '{ print $6 }')"
f7="$(echo $rec | awk '{ print $7 }')"
if [[ "x${f2} x${f3} x${f4}" != "x${f5} x${f6} x${f7}" ]]; then
echo "$f1 DOES NOT MATCH"
fi
done
當運行時,輸出正好是我正在查找的內容,但處理長度爲50k +行的文件時速度太慢。
[hartford]$ ./pdelta.sh
a1 DOES NOT MATCH
b1 DOES NOT MATCH
d1 DOES NOT MATCH
什麼是更有效的方法來實現這一目標?
爲了完整起見,還要注意'set $ rec'會將第一個字段分配給'$ 1',第二個分配給'$ 2'等。 – tripleee