仅在第一行文件中搜索特定的开始模式

时间:2015-09-17 19:07:06

标签: linux shell

我正在搜索包含以特定模式开头的记录的文件但现在遇到文件(坏数据)的问题,这些文件包含文件中该位置的多个值,这应该永远不会出现这种情况(它应该匹配每条记录)在文件中,但有时不。)以下是当前代码:

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每个文件的第一行,因为我有其他逻辑来在我的程序中捕获混合文件。

非常感谢您的任何帮助。

1 个答案:

答案 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 

用你的模式替换模式。