Linux

如何比較兩個文件的第一列,如果字元串匹配,則列印“true”

  • October 14, 2018

我有兩個文件,比如 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如果第一列中數字後面的空白字元是空格字元,則上面程式碼中的也可以替換為。

引用自:https://unix.stackexchange.com/questions/475045