繁体   English   中英

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

[英]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
  • 使用egrep包含反义词(输入的起始行和逗号)
  • 使用小型输入测试通过${VarName%% *}删除尾随空格

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM