我想檢查沒有特定值的列并將它們重定向到另一個檔案。為什么我的代碼不起作用?
我的代碼
awk -F '|' 'BEGIN{OFS=FS} {
if ( ($2 ~ /FOP/ || $2 !~ /FOP/) && $4 !~/ABC/ && $5 !~ /^YX.*$/ && $6 !~ /Clone/) print}' file
檔案:
|FOP|12345|ABC|YX0937|Clone|
AED|FOP|12345|ABC|aacc|Clone|
AUS|FOP|3446|XXW|tred|Clone|
|POP|3452|ABC|aacc|Clone|
|TOP|1234|KBJ|YX|Client|
預期輸出:
AED|FOP|12345|ABC|aacc|Clone|
AUS|FOP|3446|XXW|tred|Clone|
|POP|3452|ABC|aacc|Clone|
基本上我想排除那些具有特定模式的記錄,例如:-
$2=FOP
$4=ABC
$5=starts with YX
$6=Clone
uj5u.com熱心網友回復:
這些要求:
排除那些具有特定模式的記錄,例如:
$2=FOP
$4=ABC
$5=starts with YX
$6=Clone
翻譯成這個awk:
$ awk 'BEGIN {
OFS=FS="|"
}
!($2=="FOP" || $4=="ABC" || $5~/^XY/ || $6=="Clone")' file
解釋:
!( ... || ... )如果任何規則匹配,則排除記錄$2=="FOP"第二個欄位等于FOP$5~/^XY/第五個欄位以XY
現在您只需為其提供適當的資料進行測驗。您的示例資料不會產生一行,因為每條記錄都Clone在$6.
uj5u.com熱心網友回復:
很難理解你真正想在這里做什么,但似乎你需要逐行作業。
如果是這樣,請將您的檔案逐行讀取到陣列中:
mapfile -t array_of_your_file < "file"
然后使用行:
for line in "${array_of_your_file[@]}" ; do
if [[ line == *string_to_match* ]]; then
# do something with this line
fi
done
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/492664.html
