我正在搜索包含以特定模式开头的记录的文件但现在遇到文件(坏数据)的问题,这些文件包含文件中该位置的多个值,这应该永远不会出现这种情况(它应该匹配每条记录)在文件中,但有时不。)以下是当前代码:
echo "Parsing out list of warehouses contained in file set."
( cd $DATA && grep -l '^ 80' * ) >$TEMP/$program.list.whse80.$$
( cd $DATA && grep -l '^ 61' * ) >$TEMP/$program.list.whse61.$$
( cd $DATA && grep -l '^ 68' * ) >>$TEMP/$program.list.whse61.$$
( cd $DATA && grep -l '^ 69' * ) >>$TEMP/$program.list.whse61.$$
( cd $DATA && grep -l '^ 01' * ) >$TEMP/$program.list.whse01.$$
... .etc
当发生的文件包含以61模式(前9个空格)和01模式开头的记录记录时,61文件和01文件中捕获的文件名相同。我想强制只以这种方式grepping每个文件的第一行,因为我有其他逻辑来在我的程序中捕获混合文件。
非常感谢您的任何帮助。
答案 0 :(得分:0)
使用head来限制前n行,例如
head -3 file | grep ...
对于可以在for循环中执行的globbing文件
for f in *; do if [ -f "$f" ]; then head -1 "$f" | grep ...; fi; done
如果要输出文件名,此解决方案将不起作用,因为head只提取第一行。但是,您可以检查grep状态并自行报告文件名。
if grep -q pattern; then echo $f fi
或者你可以使用awk而不是grep
for f in *; do if [ -f "$f" ]; then awk 'NR==1 && /pattern/{print FILENAME}' "$f"; fi; done
用你的模式替换模式。