与第一个字段匹配的打印行(bash)

时间:2014-08-27 20:30:20

标签: regex bash csv awk sed

我正在尝试读取userinput,使其与csv文件的第一个字段匹配,并打印出整行。这就是我想出的:

#/bin/bash
echo "enter number: "
read USERINPUT
LINENUMBER=$(awk -v FS=',' '{print $1}' < test.csv | grep -n "$USERINPUT") 
FULLLINE=$(sed -n $LINENUMBER\p test.csv)
echo $FULLLINE

我遇到的问题是我设置了USERINPUT = 4,但我的csv文件有几行,如4,421,444等。我匹配所有这些。我如何制作

grep -n "$USERINPUT" 

只匹配它所设置的内容而没有其他内容?

4 个答案:

答案 0 :(得分:3)

不是打印每一行的第一列,而是使用grep,你应该在awk中完成整个事情:

line_number=$(awk -F, -v s="$number" '$1==s{print NR}' test.csv)

如果您只想打印该行,那很简单:

awk -F, -v s="$number" '$1==s' test.csv

顺便说一下,您可以使用echoread来指定提示,而不是使用read -p后跟read -p "enter number: " number

{{1}}

答案 1 :(得分:3)

#/bin/bash
read -p "enter number: " num
grep "^$num," test.csv

答案 2 :(得分:0)

-o grep选项仅打印与正则表达式匹配的内容。

E.g。

grep -o '.*USERINPUT.*' 

grep -o '^USERINPUT.*' 

等。

答案 3 :(得分:0)

#/bin/bash
echo "enter number: "
read USERINPUT
# for a var assignation and print content
 FULLLINE=$(egrep "^${USERINPUT%% *}," test.csv )
 echo $FULLLINE
# for only a print
 egrep "^${USERINPUT%% *}," test.csv
  • 使用egrep包括分隔符(输入周围的起始线和彗差)
  • 使用小型输入测试通过${VarName%% *}
  • 删除尾随空格