在bash中读取和比较.txt文件中的列

时间:2016-11-06 04:03:54

标签: linux bash

我有.txt文件,其内容为

5742060626,Ms.Pimpan Tantivaravong,女性

5742065826,Ms.Kaotip Tanti,女性

- 我创建了一个接口脚本来在此文件中添加列表 首先,我必须将输入id与列表中的exitsting id进行比较。 我使用cut命令只读取.txt文件的第一列。 但是,当我试图比较它时,我遇到了一个问题。

这是我的代码。

-

!/bin/bash
#
datafile='student-2603385.txt'

while read p;
do

if [ "$id" == (echo $p | cut -d, -f1) ]

then
echo 'duplicate id'

fi
done <$datafile

-

有谁能建议我,我该怎么办? 谢谢

1 个答案:

答案 0 :(得分:1)

你的脚本有很多引用错误,当变量包含文件名时总是引用变量扩展,当你想避免通过shell进行单词拆分和路径名扩展时,它也是预期的。

暂且不说,在if [ "$id" == (echo $p | cut -d, -f1) ]

  • 您需要命令替换$() echo ... | cut ...,而不是子shell ()

  • 您还需要$()周围的引号以防止分词(和路径名扩展)

  • ==是bash-ism,不是由POSIX定义的,只是一个提醒

  • 尝试尽可能多地使用[[,作为shell关键字[[处理分词

使用test[):

if [ "$id" == "$(echo "$p" | cut -d, -f1)" ]

更好:

if [[ $id == $(echo "$p" | cut -d, -f1) ]]