如何比较 bash 中变量中的两个字符串
How to compare two strings in variables in bash
我想请教一个问题:
我有这样的东西。 WEDI_RC 是一个 txt 文件,我想逐行读取它,取第一列并将其存储到变量 "name"。当我回显第 4 行时,它成功写入了第一列($1)。然后我想把它和$list比较,如果匹配就把它加到$list里写。每个名字应该只写一次。请参见下面的示例:
输入:
file1 1234 5667
file1 1234 4566
file1 1234 23456
file1 1234 23467
file2 1234 23456
file3 1234 12345
输出:
file1
file2
file3
我的代码:
list=""
while read -r line
do
name=$(echo $line | awk -F'[ ]' '{print }')
echo $name
if [ "$name" = "$list" ]; then
echo $name
list=$'$list\n$name'
echo "$list"
fi
done < $WEDI_RC
如果我没理解错的话,你想从文件WEDI_RC
的第一列中获取唯一名称的列表。如果是这样的话:
$ awk '{print }' WEDI_RC | sort -u
file1
file2
file3
备选方案 1
这也可以在不使用 sort
的情况下完成,但不能保证名称的打印顺序:
$ awk '{a[]=1} END{for (name in a)print name}' WEDI_RC
file1
file2
file3
备选方案 2
如果事先知道WEDI_RC文件中的名字是排序的,那么另一种做法是:
$ awk 'prior!={print } {prior=}' WEDI_RC
file1
file2
file3
如果我理解你的要求,你想显示出现在第一列的不同名称,你可以这样做:
previousColumn=""
while read -r column1 column2 column3; do
if [ "$previousColumn" != "$column1" ]; then
echo "$column1"
previousColumn=$column1
fi
done < $WEDI_RC
回到基础,您应该使用 cut -f1 -d" "
获取由 space 字符分隔的第一列,sort
对结果进行排序,uniq
显示 uniq结果
cut -f1 -d" " WEDI_RC | sort | uniq
或其他答案中的建议 sort -u
类似于 sort | uniq
cut -f1 -d" " WEDI_RC | sort -u
我想请教一个问题: 我有这样的东西。 WEDI_RC 是一个 txt 文件,我想逐行读取它,取第一列并将其存储到变量 "name"。当我回显第 4 行时,它成功写入了第一列($1)。然后我想把它和$list比较,如果匹配就把它加到$list里写。每个名字应该只写一次。请参见下面的示例:
输入:
file1 1234 5667
file1 1234 4566
file1 1234 23456
file1 1234 23467
file2 1234 23456
file3 1234 12345
输出:
file1
file2
file3
我的代码:
list=""
while read -r line
do
name=$(echo $line | awk -F'[ ]' '{print }')
echo $name
if [ "$name" = "$list" ]; then
echo $name
list=$'$list\n$name'
echo "$list"
fi
done < $WEDI_RC
如果我没理解错的话,你想从文件WEDI_RC
的第一列中获取唯一名称的列表。如果是这样的话:
$ awk '{print }' WEDI_RC | sort -u
file1
file2
file3
备选方案 1
这也可以在不使用 sort
的情况下完成,但不能保证名称的打印顺序:
$ awk '{a[]=1} END{for (name in a)print name}' WEDI_RC
file1
file2
file3
备选方案 2
如果事先知道WEDI_RC文件中的名字是排序的,那么另一种做法是:
$ awk 'prior!={print } {prior=}' WEDI_RC
file1
file2
file3
如果我理解你的要求,你想显示出现在第一列的不同名称,你可以这样做:
previousColumn=""
while read -r column1 column2 column3; do
if [ "$previousColumn" != "$column1" ]; then
echo "$column1"
previousColumn=$column1
fi
done < $WEDI_RC
回到基础,您应该使用 cut -f1 -d" "
获取由 space 字符分隔的第一列,sort
对结果进行排序,uniq
显示 uniq结果
cut -f1 -d" " WEDI_RC | sort | uniq
或其他答案中的建议 sort -u
类似于 sort | uniq
cut -f1 -d" " WEDI_RC | sort -u