读取具有大量空格的行并将其保留在输出中

时间:2015-11-27 11:24:02

标签: bash while-loop tabs space

我有一个看起来像这样的文件,但更大:

xxxxxxx                                              xxxxx                 xxxx
yyyyyyy                                              yyyyy                 yyyy
zzzzzzz                                              zzzzz                 zzzz
bbbbbbb                                                                    bbbb

但是要大得多,我想比较第二列和第三列,只有前四位数我写的是这样的:

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 个答案:

答案 0 :(得分:1)

您可以使用awk代替现有的shell脚本:

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

awk在空格上分隔,因此您可以与变量$2$3进行比较,而不必手动定义子字符串位置