小编Aas*_*shu的帖子

从awk程序中的路径中提取文件名

我有一个 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.csvawk 程序?

awk filenames

22
推荐指数
3
解决办法
8万
查看次数

将打印输出重定向到 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脚本中打印它,所以我需要一种有效的方法来做到这一点。

awk text-processing files

8
推荐指数
3
解决办法
2万
查看次数

如何回显带有单引号和双引号的表达式?

我尝试了很多东西,但我是 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)

shell echo quoting

4
推荐指数
1
解决办法
4304
查看次数

扔掉标准输出和错误

我已经在 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)

如何在不影响$ 的情况下抑制此错误输出?

bash pipe io-redirection stderr

3
推荐指数
2
解决办法
1万
查看次数

连接一个目录中的 1000 个文件

我知道我们可以通过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)

ls shell bash sed cat

0
推荐指数
1
解决办法
2301
查看次数

标签 统计

awk ×2

bash ×2

shell ×2

cat ×1

echo ×1

filenames ×1

files ×1

io-redirection ×1

ls ×1

pipe ×1

quoting ×1

sed ×1

stderr ×1

text-processing ×1