我正在尝试读取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"
只匹配它所设置的内容而没有其他内容?
答案 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
顺便说一下,您可以使用echo
来read
来指定提示,而不是使用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
${VarName%% *}