2015-11-27 35 views
0

我有一個看起來像這樣的文件,但很多大:讀線有很多的空間和它們保持在輸出

xxxxxxx            xxxxx     xxxx 
yyyyyyy            yyyyy     yyyy 
zzzzzzz            zzzzz     zzzz 
bbbbbbb                 bbbb 

,但很多大,我想比較的第二個和第三列,只有第4位做我寫了這樣的事情:

while IFS='' read -r line; do 

a=${line:181:4} 
b=${line:276:4} 
str1="$a" 
str2="$b" 

# echo $a 
# echo $b 
# echo $str1 
# echo $str2 

if [[ "$str1" == "$str2" ]] 
then 

     echo $line >> $1.diffs.txt 
fi 

done <$1 

的STR *的原因是因爲數字偶爾與0,因此將它們解釋爲八進制開始,給我一個錯誤,我的問題是$ 1.diffs.txt中的輸出僅包含1個空白區域,而不是全部空白區域。 IE

輸出:

xxxxxxx            xxxxx    xxxx 
yyyyyyy            yyyyy     yyyy 
zzzzzzz            zzzzz     zzzz 
+1

在你的'if'語句,你需要引用'$行'即''回聲「$行」>> ...'保留空白 – arco444

回答

1

你可以代替現有的shell腳本的使用awk

awk '{ if (substr($2,0,4) == substr($3,0,4)) { print $0 }}' $1 > $1.diffs.txt 

awk分離在默認情況下空格,所以你可以用變量的對比$2$3,而不是必須手動定義子字符串位置

+0

我的問題是,列2並不總是滿的,有時它只是空白,我想知道如果awk會「擊中「這個錯誤! – onlyf

+0

是的。你應該更新你的問題,使其更清楚,這種情況沒有提到。 – arco444

相關問題