我有一个 awk 脚本,并且我已经向它传递了一个 CSV 文件。
awk -f script.awk /home/abc/imp/asgd.csv
Run Code Online (Sandbox Code Playgroud)
我在做什么是在script.awk
. FILENAME 给了我完整的路径。由于我在 awk 中,因此无法使用basename FILENAME
.
print FILENAME;
/home/abc/imp/asgd.csv
Run Code Online (Sandbox Code Playgroud)
我已经尝试过这个 script.awk
echo $FILENAME | awk -F"/" '{print $NF}'
Run Code Online (Sandbox Code Playgroud)
但我无法在script.awk
. 如何进入asgd.csv
awk 程序?
我想将相同的行打印到 2 个不同的文件。我现在正在做的是:
print ID[i]" "Value[i]" "TS1[i]" "TS2[i] > "file1.txt";
print ID[i]" "Value[i]" "TS1[i]" "TS2[i] > "file2.txt";
Run Code Online (Sandbox Code Playgroud)
我可以编写一个命令将其重定向到两个不同的文件吗?
编辑
我不想将我的整个命令输出打印到多个文件,我想根据某些条件将一些记录写入多个文件,我在awk
脚本中打印它,所以我需要一种有效的方法来做到这一点。
我尝试了很多东西,但我是 shell 的新手。是否可以同时包含双引号和单引号echo
?
我想echo "scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}"
为系统调用生成,但由于多个双引号和单引号而出现错误。
ftable="echo" " \"" "scan" " " "'LPV',{FILTER => " "\"" "\(" "PrefixFilter ""\(""'MP1-Eq1'" "\)" "\"" "\}" "\" "
echo "scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}"
bash: syntax error near unexpected token `('
Run Code Online (Sandbox Code Playgroud)
我该怎么写scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}
?语法是hbase
's,我无法更改它...
编辑
我想在system call 中调用echo。
ftable="echo "scan 'LPV',{FILTER => "(PrefixFilter ('MP1-Eq1')"}" "
system(ftable)
error
Run Code Online (Sandbox Code Playgroud)
我试过用 $ 但是
ftable="echo $'scan" "\'" "LPV" "\'" ",{FILTER => …
Run Code Online (Sandbox Code Playgroud) 我已经在 bash 脚本中使用/dev/null重定向了我的输出,但它仍然抛出错误。代码如下
ps -p $proc | fgrep $proc> /dev/null
if [ $? -ne '0' ] ; then
......
fi
Run Code Online (Sandbox Code Playgroud)
下面是错误
error: list of process IDs must follow -p
Usage:
ps [options]
Try 'ps --help <simple|list|output|threads|misc|all>'
or 'ps --help <s|l|o|t|m|a>'
for additional help text.
For more details see ps(1).
Usage: fgrep [OPTION]... PATTERN [FILE]...
Try 'fgrep --help' for more information.
Run Code Online (Sandbox Code Playgroud)
如何在不影响$ 的情况下抑制此错误?输出?
我知道我们可以通过cat file [file] [[file] ...] > joined-file
. 我有包含很多文件的目录。我想连接所有这些。我想连接 1000 个文件,而不管它们的名称和顺序。这是我尝试过的
for i in /var/abc/*.csv; do "$i" > file1.csv ; rm -rf "$i";done
Run Code Online (Sandbox Code Playgroud)
但要跟踪计数另一个变量。什么可以是有效的方法?这样我就不能直接连接 1000 个文件并移动它们。
编辑 为什么是 1000,因为该目录包含十万个文件。所以文件的大小很重要。我已经用你的答案试过了。
cd /var/abc
for file in $(ls -p | grep -v / | tail -1000);do cat "$file" >>"/var/abcd/xigzag"$tick".csv" && rm -rf "$file";done
Run Code Online (Sandbox Code Playgroud)