如何遍历文件并仅打印第一个单词。该行以冒号分隔。例 根:01:02:toor的
该文件包含多行。这就是我到目前为止所做的,但它确实无效。
FILE=$1
k=1
while read line; do
echo $1 | awk -F ':'
((k++))
done < $FILE
我对bash-scripting一点都不好。所以对你们中的一个人来说这可能是非常微不足道的。
编辑:变量k是对行进行计数。
答案 0 :(得分:4)
使用-d
:
-f
count=$( wc -l < filename )
指定分隔符-l
指定要保留的字段如果你需要计算线数,只需
wc
CNT_FILE=20
CNT_EXTTABLE=20
echo "_${CNT_FILE}_"
echo "_${CNT_EXTTABLE}_"
if [ "$CNT_FILE" == "$CNT_EXTTABLE" ]; then
echo "match"
else
echo "no match"
fi
告诉_20_
_20_
match
计算行数答案 1 :(得分:3)
awk -F: '{print $1}' FILENAME
用冒号分隔时会打印第一个单词。这是你在找什么?
要使用循环,您可以执行以下操作:
$ cat test.txt
root:hello:1
user:bye:2
test.sh
#!/bin/bash
while IFS=':' read -r line || [[ -n $line ]]; do
echo $line | awk -F: '{print $1}'
done < test.txt
在bash中逐行阅读的示例:Read a file line by line assigning the value to a variable
结果:
$ ./test.sh
root
user
答案 2 :(得分:1)
使用perl的解决方案
%> perl -F: -ane 'print "$F[0]\n";' [file(s)]
如果您不想打印新行,请将“\ n”更改为“”。
答案 3 :(得分:1)
你可以在bash中获得没有任何外部命令的第一个单词,如下所示:
printf '%s' "${line%%:*}"
将访问名为line
的变量并删除与glob :*
匹配的所有内容并贪婪地执行此操作,以便靠近前面(即%%
而不是单{{ {1}})。
虽然使用此解决方案,您需要自己完成循环。如果这是你想要对变量做的唯一事情,那么%
解决方案会更好,所以你不必自己进行文件迭代。