[英]print line that matches first field (bash)
我正在尝试读取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"
只匹配它的设置,没有别的吗?
而不是打印每行的第一列,而是使用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
#/bin/bash
read -p "enter number: " num
grep "^$num," test.csv
-o grep选项仅打印与正则表达式匹配的内容。
例如
grep -o '.*USERINPUT.*'
要么
grep -o '^USERINPUT.*'
等等
#/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%% *}
删除尾随空格
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.