1

经过一天清理十几个不同文件中的 500M 记录后,我需要一些批处理自动化,请:

  1. 有 100 个左右名为 HIST 的文件??????(HIST 后最多 6 个字符)

  2. 我需要对每个操作运行四个操作:

     iconv -f US-ASCII -t UTF-8 %filename% - c -o %tempname1%   
     iconv -f UTF-8 -t UTF-8 %tempname1% -c -o %tempname2%   
     cat %tempname2% | tr -d '\r' > %morepermanentname%  
     sudo python blah.py %morepermanentname%
    

谁能建议如何创建临时名称/逐行传递它们并为目录中的所有 HIST* 文件循环这个东西?

这看起来对吗?

for f in HIST*
do
    $temp1 = "temp1"
    $temp2 = "temp2"
    $semi = $f"perm"
    iconv -f US-ASCII -t UTF-8 "$f" -c -o "$temp1"
    iconv -f UTF-8 -t UTF-8 "$temp1" -c -o "$temp2"
    cat "$temp2" | tr -d '\r' > "$semi"
    sudo python blah.py "$semi"
 done

请注意,iconv utf-8 到 utf-8-c看起来很奇怪,但已经抓住了一些东西。

4

3 回答 3

1

你正在寻找for.

for f in HIST*
do
  ./process "$f"
done
于 2013-07-25T03:15:57.320 回答
1

编辑你的脚本:

for f in HIST*
do
    iconv -f US-ASCII -t UTF-8 "$f" -c -o "$f".tmp
    iconv -f UTF-8 -t UTF-8 "$f".tmp -c -o "$f".tmp2
    tr -d '\r' < "$f".tmp2 > "$f"perm
    sudo python blah.py "$f"perm
    rm "$f".tmp "$f".tmp2
done

如果您不想保留原始副本而不是使用"$f".tr"$f"perm

  • =for 变量赋值之间不应有空格。
  • $分配完成时不应使用印记。
  • 引用变量。

于 2013-07-25T03:43:50.683 回答
1

鉴于iconv(在没有给出输入文件时从标准输入读取;写入标准输出)的记录行为,您根本不需要显式的中间文件。

for file in HIST*
do
    semi="${file}perm"
    iconv -f US-ASCII -t UTF-8 -c "$file" |
    iconv -f UTF-8 -t UTF-8 -c |
    tr -d '\r' > "$semi"
    sudo python blah.py "$semi"
done

通过在使用文件名变量时引用它们,它还可以避免任何文件名包含空格的问题——这似乎不是一个问题。

我很好奇——你到底为什么需要blah.py脚本的 root 权限?是将半永久文件复制到特权位置还是什么?命令后是否需要删除半永久文件sudo

于 2013-07-25T03:46:37.533 回答