Linux
如何比較兩個文件的第一列,如果字元串匹配,則列印“true”
我有兩個文件,比如 file1 和 file2。
file1: 91 | 2018-10-11 16:07:14 | bkwdv | 188.0000 | 77 | 2018-10-12 15:05:15 | wvwef | 94.0000 | file2: 77 | 2018-10-12 15:05:15 | wvwef | 94.0000 91 | 2018-10-11 16:07:14 | bkwdv | 188.0000
我想比較 file1 的第一列和 file2 的第一列。
如果字元串匹配(無論順序如何,如給定的輸入數據),它應該列印“成功”,否則列印“退出”。因此,根據給定的輸入數據,它應該列印“成功”。
請注意,第一列中的行數在任何一個文件中都可能不同,因此在這種情況下,它應該退出。
類似於我在這裡對您的問題的回答
#!/bin/bash var=$(cut -d"|" -f 1 file | sort -k1.1n) var1=$(cut -d"|" -f 1 file | sort -k1.1n) if [ "$var" == "$var1" ] then echo "success" else exit fi
說明💡:
-d
命令中的分隔符cut
設置為|
with-d |
,因此cut
可以看到列之間的邊界是|
。然後可以使用標誌cut
拉出第 1 列中感興趣的欄位。-f
在本例中,我們希望該命令
sort
比較有限的數據子集(即第 1 列中的數據)。為此,我們使用稱為選項的鍵指定要比較的欄位。 將對第一個欄位進行排序,並忽略其餘列。換句話說,將第 1 列排序到第 1 列(即僅對第 1 列排序)。-k``k1.1
根據排序人
-k, --key=POS1[,POS2] Where POS1 is the starting field position, and POS2 is the ending field position
從每個文件中提取第一列,對它們進行數字排序,然後進行比較:
awk '{ print $1 }' <file1 | sort -n >file1.col1 awk '{ print $1 }' <file2 | sort -n >file2.col1 if cmp -s file1.col1 file2.col1; then echo 'success' else echo 'exit' fi rm file1.col1 file2.col1
或者,使用
bash
-specific 語法:if cmp -s <( awk '{ print $1 }' <file1 | sort -n ) \ <( awk '{ print $1 }' <file2 | sort -n ) then echo 'success' else echo 'exit' fi
該
cmp -s
命令不會輸出任何內容,但如果它的兩個文件操作數具有相同的內容,則會成功退出。我們在if
語句中使用它來確定兩個文件的排序第一列是否相同。
awk '{ print $1 }'``cut -d ' ' -f 1
如果第一列中數字後面的空白字元是空格字元,則上面程式碼中的也可以替換為。