對不起我的英語。我正在為新員工的入職流程撰寫一個腳本,例如“零接觸”,并且我在使用 shell bash 腳本操作 csv 時遇到了一些問題。
我的輸入 csv tmp.csv 示例:
SN,HOSTNAME,OWNER,MODEL,USER
C02G1,,[email protected],MacBook Pro,
C02G71X,HOSTNAME0001,[email protected],MacBook Pro,
FVFGH0S,,[email protected],MacBook Pro,
PC24Q,,[email protected],Macbook Air,
所需的輸出(可以是新檔案或編輯輸入檔案):
SN,HOSTNAME,OWNER,MODEL,USER
C02G1,,[email protected],MacBook Pro,
C02G71X,HOSTNAME0001,[email protected],MacBook Pro,username
FVFGH0S,,[email protected],MacBook Pro,
PC24Q,,[email protected],Macbook Air,
我的腳本:
#!/bin/sh
# Get the current device's serial number
SERIAL=$(system_profiler SPHardwareDataType | awk '/Serial/ {print $4}')
# File name
tmpFile=$'tmp.csv'
# Download the CSV from Google Drive, file must be set to Shared With Anyone with Link (or Shared with Anyone)
curl -L -o $tmpFile 'https://docs.google.com/spreadsheets/d/XXXXXXXX/export?format=csv'
# Delete unwanted characters
sed -i'BAK' "s/$(printf '\r')\$//" $tmpFile
# Get username MAC
user=$(id -un)
while IFS=, read -r SN HOSTNAME OWNER MODEL USER
do
if [ "$SN" == "$SERIAL" ]
then
hostname=$HOSTNAME
awk -F, -v old="$USER" -v new="$user" '{gsub(old,new,$5);print $0}' $tmpFile > tmp3.csv
fi
done < $tmpFile
sudo scutil --set HostName $hostname
sudo scutil --set LocalHostName $hostname
sudo scutil --set ComputerName $hostname
dscacheutil -flushcache
etc etc etc......
使用我的腳本輸出:
SN,HOSTNAME,OWNER,MODEL,USER
C02G1,,[email protected],MacBook Pro,username
C02G71X,HOSTNAME0001,[email protected],MacBook Pro,username
FVFGH0S,,[email protected],MacBook Pro,username
PC24Q,,[email protected],Macbook Air,username
摘要:所以我需要的是僅在將 SN 與 $SERIAL 匹配的行中,在 csv 的 USER 列上添加 $user
在此先感謝,如果有人覺得此代碼可能有幫助,我可以在完成后發送它!
uj5u.com熱心網友回復:
首先,我不知道您是如何使用,分隔符獲得輸出的。我必須明確設定它,否則awk正在使用空間。
但回到問題,你可以使用兩個規則:
- 一個匹配該行并更新第 5 個欄位,
- 另一個匹配所有內容并列印整行
$1 == sn { $5 = user }
{ print $0 }
在腳本中,它將如下所示:
#!/usr/bin/env bash
SN_TO_MATCH="C02G71X"
USER_TO_ADD="foobar"
awk -F, -v OFS=, -v sn="${SN_TO_MATCH}" -v user="${USER_TO_ADD}" '$1==sn {$5=user} {print $0}' tmp.csv
輸出:
SN,HOSTNAME,OWNER,MODEL,USER
C02G1,,[email protected],MacBook Pro,
C02G71X,HOSTNAME0001,[email protected],MacBook Pro,foobar
FVFGH0S,,[email protected],MacBook Pro,
PC24Q,,[email protected],Macbook Air,
uj5u.com熱心網友回復:
這不是 awk,但它可能對您有用。我正在使用米勒
這是一個簡化的例子
#!/bin/bash
serial="C02G71X"
user="tom"
mlr --csv put 'if($SN=="'"$serial"'"){$USER="'"$user"'"} then {$USER=""}' input.csv >output.csv
--------- -------------- --------------- ------------- ------
| SN | HOSTNAME | OWNER | MODEL | USER |
--------- -------------- --------------- ------------- ------
| C02G1 | | [email protected] | MacBook Pro | |
| C02G71X | HOSTNAME0001 | [email protected] | MacBook Pro | tom |
| FVFGH0S | | [email protected] | MacBook Pro | |
| PC24Q | | [email protected] | Macbook Air | |
--------- -------------- --------------- ------------- ------
給你
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/421588.html
標籤:
上一篇:設定別名時找不到zsh命令錯誤
